require 'simple_json'

class AjaxWikiController < ApplicationController

public
  #
  # wikiテキストをHTMLに変換して返却する（プレビュー用）
  #
  def to_html

    # wikiレンダラーオブジェクトを取得
    content = Content.find(params[:id])
    content.body = params[:wiki_text]

    render :inline => content.fetch_convert_body_without_block
#    @output = content.fetch_convert_body_without_block
#    render :layout=>false, :action=>'convert'
  end

  #
  # wikiテキストをブロック付きのHTMLに変換して返却する
  #
  def to_html_with_block

    # wikiレンダラーオブジェクトを取得
    content = Content.find(params[:id])
    content.body = params[:wiki_text]

    render :inline => content.fetch_convert_body_with_block

#    @output = content.fetch_convert_body_with_block
#    render :layout=>false, :action=>'convert'
  end

  #
  # wikiテキストを保存する。
  # @return json {
  #                  :status 成功時:'success' 失敗時:'error'
  #                  :value  成功時:HTML 失敗時:エラーメッセージ
  #              }
  #
  def save
    @content = Content.find(params[:id])
    @content.cache = nil
    @content.body  = params[:wiki_text] unless params[:wiki_text].nil?

    # 元々のデータかリクエストパラメータのどちらかの凍結フラグが1の場合は、パスワード認証を行う
    if (@content.freeze_flag.to_i == 1) || (params[:freeze_flag].to_i == 1) then
      unless _check_challenge_code params[:response_code] then
        @output = JsonBuilder.new.build({:status => 'error', :value => 'パスワードが不正です。'})
        render :inline => @output
        return
      end

      # エラーでなければ、リクエストパラメータの凍結フラグを使用
      @content.freeze_flag = params[:freeze_flag] unless params[:freeze_flag].nil?
    end

    if @content.valid?
      # 保存する
      if @content.save
        @content.convert_body
#        @output = @content.cache
        @output = JsonBuilder.new.build({:status => 'success', :value => @content.cache, :freeze_flag => @content.freeze_flag})
      else
        @content.convert_body
      end
    else
      @output = JsonBuilder.new.build({:status => 'error', :value => '保存に失敗しました。'})
    end
    render :inline => @output
#    render :layout=>false, :action=>'convert'
  end

  #
  # キャッシュされたHTMLを取得する（元に戻す機能用）
  #
  def index
    @content = Content.find(params[:id])
    @content.convert_body
    # 指定されたidのページを表示する
    render :inline => @content.cache
#    @content = Content.find(params[:id])
#    @output = @content.cache
#    render :layout=>false, :action=>'convert'
  end

  #
  # 認証用のチャレンジコードをブラウザに返す
  #
  def get_challenge_code
    render :inline=> _create_challenge_code
  end

end
